; long long int power(int x, unsigned y);

global power

%define x [ebp + 8]
%define y [ebp + 12]

section .text

power:
	push ebp
	mov ebp, esp
	push esi
	push edi
	push ebx
	
	xor edx, edx ; Limpio edx. Que es la parte alta del numero que devuelvo.
	mov eax, 1 ; Muevo a eax 1.
	mov ebx, x ; Muevo a ebx el parametro x.
	mov ecx, y ; Muevo a ecx el parametro y.
	
	cmp ecx, 0 ; Comparo ecx con 0.
	je fin ; Si lo que tengo esta elevado a la cero devuelvo 1.
	
ciclo:
	mul ebx ; Sino multiplico el parametro x, y veces.
	loop ciclo
	
	; Otra forma:
	; repz mul ebz ; Multiplico hasta que ecx sea cero o que se accione el flag de cero.
	
fin:
	pop ebx
	pop edi
	pop esi
	pop ebp
	ret
